import json
import os
import hashlib
import wmi,sys
import cryptocode
from datetime import datetime
sys.path.append('..')
from lib import config


def bdConf():
    bdConfigs = config.materialDb.getBdConfigs()
    return bdConfigs


def bdSetconfCache(opt='r',data=None):
    # 1. 判断本地是否有缓存文件cache
    # cache_file = os.getcwd() + '\\data\\bdsetconf.cache'
    cache_file = '.\\data\\bdsetconf.cache'
    print('line:19 , cache_file==>',cache_file)
    if opt == 'r':   
        try:
            if os.path.exists(cache_file):
                with open(cache_file, 'rb') as f:
                    cached_data = json.load(f)
                # 将数据转换为JSON并打印
                # print("JSON content of the cache:")
                return cached_data
            else:
                return False
        except ValueError:
            return False

    else:
        if os.path.exists(cache_file):
            os.remove(cache_file)

        with open(cache_file, 'wb') as f:
            f.write(json.dumps(data).encode('utf-8'))

        with open(cache_file, 'rb') as f:
            cached_data = json.load(f)
            for key, value in data.items():
                cached_data[key] = value

        with open(cache_file, 'wb') as f:
            f.write(json.dumps(cached_data).encode('utf-8'))
                
        return True



##判断是否为json字符串
def is_valid_jsonstring(json_string):
    try:
        json.loads(json_string)
        return True
    except ValueError:
        return False


##判断是否为json
def is_valid_json(myjson):
    try:
        a = json.loads(myjson)
    except ValueError as e:
        return False
    return True


def is_dict_valid(my_dict):
    required_keys = ['key1', 'key2', 'key3']
    return all(key in my_dict for key in required_keys)


def get_app_serial( ):
    c = wmi.WMI()
    cpu = c.Win32_Processor()[0]
    return cpu.ProcessorId.strip()

def encryptAppcodekey(encryptString):
    secret_key = get_app_serial()
    decryptString = cryptocode.encrypt(encryptString, secret_key)
    decryptString = cryptocode.encrypt(decryptString, secret_key)
    return decryptString

def decryptAppcodekey(encryptString):
    secret_key = get_app_serial()
    decryptString = cryptocode.decrypt(encryptString, secret_key)
    decryptString = cryptocode.decrypt(decryptString, secret_key)
    return decryptString



def unAppcodekey(encryptString):
    appkeyInfo = {}
    if encryptString == '':
        appkeyInfo['status'] = False
        appkeyInfo['msg'] = None
        return appkeyInfo

    appkeyInfo['status'] = False
    appkeyInfo['msg'] = '非法卡密'
    secret_key = get_app_serial()
    plaintext = decryptAppcodekey(encryptString)
    plaintextRes = plaintext.split("||")

    if len(plaintextRes) != 3:
       return appkeyInfo
    if plaintextRes[0] != secret_key:
        return appkeyInfo
    if plaintextRes[1] != 'bdsendpack':
        return appkeyInfo

    givenDataStr = plaintextRes[2]
    givenData = datetime.strptime(givenDataStr, "%Y%m%d")

    if givenData > datetime.now():
        appkeyInfo['status'] = True
        appkeyInfo['msg'] = givenData.strftime("%Y-%m-%d")
        return appkeyInfo
    else:
        # 如果给定的日期大于或等于当前日期，则返回 False
        appkeyInfo['status'] = False
        appkeyInfo['msg'] = '过期的卡密'
        return appkeyInfo

    

def disclaimer():
    return ("欢迎您使用主流快排seo应用（以下简称“本软件”）。为了保障您的权益，请在使用本软件前仔细阅读以下免责声明。若您使用本软件，将被视为同意以下免责声明的全部内容。\n" +
                         "一、本软件仅用于合法用途，严禁用于任何违法活动。若您使用本软件从事违法活动，一切后果由您自行承担，且本软件及其开发者有权向法院提起诉讼，追究您的法律责任。\n" +
                         "二、本软件遵循国家相关法律法规，尊重并保护用户隐私。在您使用本软件过程中，我们会收集和使用您的个人信息，但仅限于为您提供更好的服务。我们承诺不会将您的个人信息泄露给第三方，除非国家法律法规另有规定或得到您的明确授权。\n" +
                         "三、本软件及其开发者不承担以下责任：\n" +
                         "因您使用本软件导致的任何直接、间接、偶然、特殊及衍生的损失或损害，包括但不限于利润损失、商誉损失、数据丢失等。\n" +
                         "因不可抗力、计算机病毒、黑客攻击、系统不稳定等原因导致的本软件无法正常使用。\n" +
                         "因您未遵守本软件使用规定或违反本免责声明导致的任何损失或损害。\n" +
                         "四、本软件可能包含第三方软件或技术，本软件及其开发者对第三方软件或技术的合法性、安全性、有效性等不承担任何责任。\n" +
                         "五、本软件及其开发者保留随时修改、中断或终止本软件服务的权利，且无需提前通知您。\n" +
                         "六、本免责声明的解释权归本软件及其开发者所有。\n" +
                         "七、如本免责声明与国家法律法规相抵触，以国家法律法规为准。\n" +
                         "八、您不得以任何形式非法复制、传播本软件，或对本软件进行反编译、反向工程等行为。任何未经授权的使用、复制或传播本软件的行为均被视为侵权，本软件及其开发者有权依法追究您的法律责任。\n" +
                         "请您在了解并同意以上免责声明后开始使用本软件。若您对本免责声明有任何疑问，请随时与我们联系sdw035@outlook.com。感谢您的使用！"
                    )

